import request, { ApiResponse } from './http';  // 导入封装后的请求函数
import { BASE_URL, TENANT_ID } from '@/config';

// 添加自定义 UUID 生成函数
export function generateUUID() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
        const r = Math.random() * 16 | 0;
        const v = c == 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });
}


/**
 * 上传文件（服务端server）
 * @param filePath 本地文件路径
 * @param directory 文件目录（可选）
 * @param onProgress 进度回调函数
 * @returns Promise
 */
export const uploadFile = (
    filePath: string,
    directory: string = '', // 添加 directory 参数，默认为空字符串
    onProgress?: (progress: number) => void
): Promise<any> => {
    return new Promise((resolve, reject) => {
        // 获取 access_token
        const token = uni.getStorageSync('access_token');

        // 使用 uni.uploadFile 进行文件上传
        const uploadTask = uni.uploadFile({
            url: `${BASE_URL}/infra/file/upload`,
            filePath: filePath,
            name: 'file',
            formData: {
                timestamp: new Date().getTime(),
                directory: directory // 添加 directory 参数
            },
            header: {
                // 仅在此处添加 access_token 请求头
                'Authorization': token ? `Bearer ${token}` : '',
                'tenant-id': TENANT_ID,
            },
            success: (uploadRes) => {
                try {
                    const data = JSON.parse(uploadRes.data);
                    resolve(data);
                } catch (e) {
                    resolve({
                        code: 200,
                        data: {
                            url: filePath // 统一使用 url 字段
                        },
                        msg: '上传成功'
                    });
                }
            },
            fail: (err) => {
                console.error('上传失败:', err);
                reject(err);
            }
        });

        // 如果提供了进度回调函数，则监听上传进度
        if (onProgress) {
            uploadTask.onProgressUpdate((res) => {
                onProgress(res.progress);
            });
        }
    });
};